﻿/*******************************************************
 * 
 * 作者：胡庆访
 * 创建时间：20100331
 * 说明：延迟加载外键实体 的实现
 * 运行环境：.NET 3.5 SP1
 * 版本号：1.0.0
 * 
 * 历史记录：
 * 创建文件 胡庆访 20100331
 * 添加非泛型版本的基类，添加InheritanceLazyEntityRef 胡庆访 20100925
 * 
*******************************************************/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace BPM.Entity
{
	/// <summary>
	/// 延迟加载的引用实体
	/// （外键等）
	/// </summary>
	public interface ILazyEntityRef
	{
		/// <summary>
		/// 引用对象的键
		/// </summary>
		int Id { get; set; }

		/// <summary>
		/// 此属性综合了Id和IsEmpty属性。
		/// </summary>
		int? NullableId { get; set; }

		/// <summary>
		/// 被引用的对象
		/// </summary>
		BaseEntity Entity { get; set; }

		/// <summary>
		/// 是否已经加载/设置了实体引用对象
		/// </summary>
		bool LoadedOrAssigned { get; }

		/// <summary>
		/// 表示是否已经清空这个引用，不再引用任何实体。
		/// </summary>
		bool IsEmpty { get; }

		/// <summary>
		/// 直接加载外键实体。
		/// 
		/// 如果list中有指定的实体，则直接加载。
		/// 否则，从存储层加载
		/// </summary>
		/// <param name="list"></param>
		void Load(IList list);
	}

	/// <summary>
	/// 延迟加载的引用实体
	/// （外键等）
	/// </summary>
	/// <typeparam name="TEntity"></typeparam>
	public interface ILazyEntityRef<TEntity> : ILazyEntityRef
		where TEntity : BaseEntity
	{
		/// <summary>
		/// 被引用的对象
		/// </summary>
		new TEntity Entity { get; set; }
	}
}
